home *** CD-ROM | disk | FTP | other *** search
/ CGI How-To / CGI HOW-TO.iso / chap5 / 5_9 / sel_c / select.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-15  |  3.2 KB  |  188 lines

  1.  
  2. #include "parsehtm.h"
  3. #include "array.h"
  4. #include <stdio.h>
  5.  
  6. Dictionary userData;
  7. String selectName;
  8. int allowMultiple = 0;
  9.  
  10. void optionHandler(String ts,String as,String et,Dictionary td)
  11. {
  12.     String value = 0;
  13.     String data = 0;
  14.     int foundOne = 0;
  15.     
  16.     data = dict_valueForKey(userData,selectName->string);
  17.     value = dict_valueForKey(td,"VALUE");
  18.     
  19.     if(data && value && !strcmp(data->string,value->string))
  20.     {
  21.         value = dict_valueForKey(td,"SELECTED");
  22.         
  23.         if(value)
  24.         {
  25.             string_setStringValue(value,"SELECTED");
  26.         }
  27.         else
  28.         {
  29.             value = string_alloc(8);
  30.             string_setStringValue(value,"SELECTED");
  31.             dict_setValueForKey(td,value->string,value);
  32.         }
  33.     }
  34.     else if(value && allowMultiple)
  35.     {
  36.         String newName = 0;
  37.         Array arrayData = 0;
  38.         
  39.         newName = string_alloc(16);
  40.         
  41.         string_setStringValue(newName,"A_");
  42.         string_appendString(newName, selectName->string);
  43.         
  44.         arrayData = dict_valueForKey(userData, newName->string);
  45.         
  46.         if(arrayData)
  47.         {
  48.             int i,max;
  49.             
  50.             max = array_count(arrayData);
  51.             
  52.             for(i=0;i<max;i++)
  53.             {
  54.                 data = (String) array_itemAt(arrayData,i);
  55.                 
  56.                 if(data && data->string && !strcmp(data->string,value->string))
  57.                 {
  58.                     value = dict_valueForKey(td,"SELECTED");
  59.                     
  60.                     if(value)
  61.                     {
  62.                         string_setStringValue(value,"SELECTED");
  63.                     }
  64.                     else
  65.                     {
  66.                         value = string_alloc(8);
  67.                         string_setStringValue(value,"SELECTED");
  68.                         dict_setValueForKey(td,value->string,value);
  69.                     }
  70.                     foundOne = 1;
  71.                 }
  72.             }
  73.             
  74.             if(!foundOne)
  75.             {
  76.                 value = dict_orphanValueForKey(td,"SELECTED");
  77.         
  78.                 if(value)
  79.                 {
  80.                     string_free(value);
  81.                 }
  82.             }
  83.         }
  84.         
  85.         string_free(newName);
  86.     }
  87.     else
  88.     {
  89.         value = dict_orphanValueForKey(td,"SELECTED");
  90.         
  91.         if(value)
  92.         {
  93.             string_free(value);
  94.         }
  95.     }
  96.     
  97.     value = stringForTagDict(td);
  98.     
  99.     if(value)
  100.     {
  101.         string_setStringValue(ts,value->string);
  102.     
  103.         string_free(value);
  104.     }
  105. }
  106.  
  107. void selectHandler(String ts,String as,String et,Dictionary td)
  108. {
  109.     String value = 0;
  110.     
  111.     value = dict_valueForKey(td,"MULTIPLE");
  112.     
  113.     if(value)
  114.     {
  115.         allowMultiple = 1;
  116.     }
  117.     else
  118.     {
  119.         allowMultiple = 0;
  120.     }
  121.     
  122.     value = dict_valueForKey(td,"NAME");
  123.     
  124.     if(value)
  125.     {
  126.         string_setStringValue(selectName,value->string);
  127.     }
  128.     else
  129.     {
  130.         string_empty(selectName);
  131.     }
  132.     
  133.     value = stringForTagDict(td);
  134.     
  135.     if(value)
  136.     {
  137.         string_setStringValue(ts,value->string);
  138.     
  139.         string_free(value);
  140.     }
  141. }
  142.  
  143.  
  144. void main(int argc, char *argv[])
  145. {
  146.     String output;
  147.     String value;
  148.     Array valueArray;
  149.     
  150.     userData = dict_alloc();
  151.     selectName = string_alloc(16);
  152.     
  153.     initializeHtmlParsingLibrary();
  154.     
  155.     dict_setValueForKey(handlerDict,"SELECT",selectHandler);
  156.     dict_setValueForKey(handlerDict,"OPTION",optionHandler);
  157.     
  158.     value = string_alloc(8);
  159.     string_setStringValue(value,"Stephen");
  160.     dict_setValueForKey(userData,"name",value);
  161.     
  162.     valueArray = array_alloc(2);
  163.     
  164.     value = string_alloc(4);
  165.     string_setStringValue(value,"AMEX");
  166.     array_addItem(valueArray,value);
  167.     
  168.     value = string_alloc(4);
  169.     string_setStringValue(value,"Visa");
  170.     array_addItem(valueArray,value);
  171.     
  172.     dict_setValueForKey(userData,"A_card",valueArray);
  173.     
  174.     output = parseHtml("sel_c.htm");
  175.     
  176.     if(output && output->string)
  177.     {
  178.         printf("Content-type: text/html\n\n");
  179.         fwrite(output->string,sizeof(char),strlen(output->string),stdout);
  180.         printf("\n");
  181.         
  182.         string_free(output);
  183.     }
  184.     
  185.     exit(0);
  186. }
  187.  
  188.